package br.com.seuimovelnamao.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.seuimovelnamao.dao.LocalizacaoDAO;
import br.com.seuimovelnamao.model.Bairro;
import br.com.seuimovelnamao.model.Cidade;
import br.com.seuimovelnamao.model.Endereco;
import br.com.seuimovelnamao.model.Estado;

@Controller
public class LocalizacaoController {
	
	/**
	 * @param cep
	 * @param request
	 * @param response
	 * @return
	 * Ajax que retorna o endereco de acordo com o CEP digitado
	 */
	@RequestMapping("/ajaxBuscarLocalizacao")
	public ModelAndView buscarLocalizacao(String cep, HttpServletRequest request, HttpServletResponse response){
		
		Session session = (Session)request.getAttribute("hibernateSession");

		LocalizacaoDAO dao = new LocalizacaoDAO(session);
		Endereco endereco = dao.getEnderecoPorCEP(cep);
		
		ModelAndView mv = new ModelAndView("ajax-get-endereco-por-cep");
		
		// Verifica se encontrou o endereco do cep digitado
		if(endereco == null){
			response.setStatus(500);
		}else{
			mv.addObject("endereco", endereco);
		}
		
		return mv;
	}
	
	/**
	 * @param estado
	 * @param request
	 * @param response
	 * @return
	 * Ajax que retorna as cidades de um estado
	 */
	@RequestMapping("/ajaxGetCidades")
	public ModelAndView ajaxGetCidades(String estadoUF, HttpServletRequest request, HttpServletResponse response){
		
		Session session = (Session)request.getAttribute("hibernateSession");

		LocalizacaoDAO dao = new LocalizacaoDAO(session);
		Estado estado = dao.getEstadoPorUF(estadoUF);
		List<Cidade> cidades = dao.getCidadesPorEstado(estado);
		
		ModelAndView mv = new ModelAndView("ajax-get-cidades");
		
		// Verifica se encontrou alguma cidade
		if(cidades.size() == 0){
			response.setStatus(500);
		}else{
			mv.addObject("cidades", cidades);
		}
		
		return mv;
	}
	
	/**
	 * @param estado
	 * @param cidade
	 * @param request
	 * @param response
	 * @return
	 * Ajax que retorna as cidades de um estado
	 */
	@RequestMapping("/ajaxGetBairros")
	public ModelAndView ajaxGetBairros(String estadoUF, String cidadeURL, HttpServletRequest request, HttpServletResponse response){
		
		Session session = (Session)request.getAttribute("hibernateSession");

		LocalizacaoDAO dao = new LocalizacaoDAO(session);
		Estado estado = dao.getEstadoPorUF(estadoUF);
		Cidade cidade = dao.getCidadePorNomeURL(cidadeURL, estado);
		List<Bairro> bairros = dao.getBairrosPorCidade(cidade);
		
		ModelAndView mv = new ModelAndView("ajax-get-bairros");
		
		// Verifica se encontrou alguma cidade
		if(bairros.size() == 0){
			response.setStatus(500);
		}else{
			mv.addObject("bairros", bairros);
		}
		
		return mv;
	}

}
